package com.example.backend.utils;

import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.ZoneId;
import java.time.format.DateTimeFormatter;
import java.util.Date;

/**
 * 时间转换工具类，支持 Date、LocalDateTime、LocalDate、String 之间的相互转换
 */
public class DateUtils {

    // 默认日期时间格式：yyyy-MM-dd HH:mm:ss
    public static final String DEFAULT_DATETIME_PATTERN = "yyyy-MM-dd HH:mm:ss";

    // 默认日期格式：yyyy-MM-dd
    public static final String DEFAULT_DATE_PATTERN = "yyyy-MM-dd";

    /**
     * 将 Date 转换为 LocalDateTime
     */
    public static LocalDateTime toLocalDateTime(Date date) {
        return date.toInstant()
                .atZone(ZoneId.systemDefault())
                .toLocalDateTime();
    }

    /**
     * 将 Date 转换为 LocalDate
     */
    public static LocalDate toLocalDate(Date date) {
        return date.toInstant()
                .atZone(ZoneId.systemDefault())
                .toLocalDate();
    }

    /**
     * 将 LocalDateTime 转换为 Date
     */
    public static Date toDate(LocalDateTime localDateTime) {
        return Date.from(localDateTime.atZone(ZoneId.systemDefault()).toInstant());
    }

    /**
     * 将 LocalDate 转换为 Date（时间为当天 00:00:00）
     */
    public static Date toDate(LocalDate localDate) {
        return Date.from(localDate.atStartOfDay(ZoneId.systemDefault()).toInstant());
    }

    /**
     * 将字符串解析为 LocalDateTime
     */
    public static LocalDateTime parseLocalDateTime(String dateTimeStr, String pattern) {
        DateTimeFormatter formatter = DateTimeFormatter.ofPattern(pattern);
        return LocalDateTime.parse(dateTimeStr, formatter);
    }

    /**
     * 将字符串解析为 LocalDate
     */
    public static LocalDate parseLocalDate(String dateStr, String pattern) {
        DateTimeFormatter formatter = DateTimeFormatter.ofPattern(pattern);
        return LocalDate.parse(dateStr, formatter);
    }

    /**
     * 格式化 LocalDateTime 为字符串
     */
    public static String format(LocalDateTime dateTime, String pattern) {
        if (dateTime == null) return null;
        return DateTimeFormatter.ofPattern(pattern).format(dateTime);
    }

    /**
     * 格式化 LocalDate 为字符串
     */
    public static String format(LocalDate date, String pattern) {
        if (date == null) return null;
        return DateTimeFormatter.ofPattern(pattern).format(date);
    }

    /**
     * 获取当前时间的字符串表示（默认格式）
     */
    public static String nowAsString() {
        return format(LocalDateTime.now(), DEFAULT_DATETIME_PATTERN);
    }

    /**
     * 获取当前日期的字符串表示（仅日期）
     */
    public static String todayAsString() {
        return format(LocalDate.now(), DEFAULT_DATE_PATTERN);
    }
}


